iT邦幫忙

2024 iThome 鐵人賽

DAY 3
2
Modern Web

如何詠唱JavaScript的Math咒語系列 第 3

[Day03]-可以跟你要簽名嗎Math.sign()

  • 分享至 

  • xImage
  •  

今天要介紹的咒語是

寐偲,賽

只要唸出這個咒語就不需要動手簽名了,咒語會自動變出一個簽名

想像一下每次刷卡刷很多錢都要簽名很麻煩對吧!
店員要拿單子給你簽,這時你非常有氣勢地喊出:

寐偲,賽!」

可以想像店員錯愕的表情嗎?然後你還是得自己動手簽名。

這邊的sign指的是符號,使用Math.sign()將會得到一個數字型別且保留他的「符號」。

舉例來說,10所代表的是+10,那他就會保留符號+然後回傳1來代表這個數的符號。

直接來看看怎麼使用吧!

語法

Math.sign(x)

參數

放入一個數字型別

回傳值

他將回傳一個代表傳入之引數的符號:

  • 如果x是正數,回傳1
  • 如果x是負數,回傳-1
  • 如果x0,回傳0
  • 如果x-0,回傳-0
  • 如果都不是以上,回傳NaN

看起來就是用來判斷數字是正數、負數或零,來看看規範吧!

規範

https://ithelp.ithome.com.tw/upload/images/20240917/20169038Ku2vmBRHWS.png
喔!開頭就說這個函式回傳x的符號,指出x是正數、負數或是零,傳入後執行以下操作:

  1. 令一個n,值一樣為ToNumber(x)的結果。
  2. 如果nNaN、浮點數+0跟浮點數-0其中一個,那就回傳n本身。
  3. 如果n小於浮點數-0,回傳浮點數-1
  4. 都不是以上情況就回傳浮點數1

結束了?啊我還不知道他可以用來幹嘛呢QQ

應用

看完這個方法後想辨別正還是負我的腦中只有一張圖片
https://ithelp.ithome.com.tw/upload/images/20240917/20169038u7UMTuHI4L.png

圖片來源:用Mac內建工具畫的,如果太簡陋請多多包涵。

物理的運動圖形((???

簡單幫大家回顧一下這個會出現在國中物理的圖吧!

t1這個時間點速度是「正」的,t2速度變成0,到了t3速度變成「負」的,最後t4時速度又回到0了。

那速度值的「正」、「負」各代表什麼呢?就是運動的方向~如果我們定義往右走是正的,那麼往左走就會是負的,那0就會代表他是靜止不動的!

解釋完我們就簡單寫個小小的練習來判斷運動狀態吧!

function getMotionState(velocity){
    const sign = Math.sign(velocity);
    
    switch (Math.sign(velocity)) {
        case 1: return "向右";
        case -1: return "向左";
        case 0: return "靜止";
    }
}

console.log(getMotionState(-10)); //向左

寫完覺得這個例子滿瞎的...明明寫if/else就可以解決哈哈,針對效能好像也幾乎沒有差別。
image

所以如果有個數我們很想知道他的正負號該怎麼做呢?

寐偲,賽

Math.sign()還有另一個特別之處就是能夠分辨0-0,如果今天得到的數非常小而且是負數,例如1 / -Infinity,那Math.sign(1 / -Infinity)將會回傳-0

也許這會是一個方向!但我還沒有想法,大家可以的話幫忙想想看有沒有適合的使用時機,歡迎來訊討論!

什麼鬼,令人挫折的一天,明天看看會不會好轉。

參考資料


上一篇
[Day02]-數學中的防鎖死系統Math.abs()
下一篇
[Day04]-斜邊分之鄰邊,我的鄰居是邊邊Math.cos()
系列文
如何詠唱JavaScript的Math咒語13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

2
橘子
iT邦新手 5 級 ‧ 2024-09-17 00:16:09

到此一遊,Math.sign(🍊)

jeremykuo iT邦新手 5 級 ‧ 2024-09-17 00:19:35 檢舉

這樣應該會得到NaN

++ iT邦新手 5 級 ‧ 2024-09-17 17:23:16 檢舉

到此一遊,Math.sign(🍊++)

我要留言

立即登入留言